#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 24 11:30:13 2017
@__author:gaoxiaojun
"""
import psycopg2
from conf.conf import *
from logConf import logger
LOGGER = logger.get_logger()


def writeDb(sql,value):
    """
    连接mysql数据库（写），并进行写的操作，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false，如果所有执行正常，则返回true
    """
    value = value if value else ''
    try:
        conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_ip, port=db_port)
        cursor = conn.cursor()
    except Exception as e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql,value)
        conn.commit()  # 提交事务
    except Exception as e:
        conn.rollback()  # 如果出错，则事务回滚
        LOGGER.error('数据写入失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return True

def commitSql(sql):
    """
    连接mysql数据库（写），并进行写的操作，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false，如果所有执行正常，则返回true
    """
    try:
        conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_ip, port=db_port)
        cursor = conn.cursor()
    except Exception as  e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql)#传入参数方式做
        conn.commit()  # 提交事务
    except Exception as e:
        conn.rollback()  # 如果出错，则事务回滚
        LOGGER.error('数据写入失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return True

def readDb(sql):
    """
    连接mysql数据库（从），并进行数据查询，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false，如果所有执行正常，则返回查询到的数据，这个数据是经过转换的，转成字典格式，方便模板调用，其中字典的key是数据表里的字段名
    """
    try:
        conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_ip, port=db_port)
        cursor = conn.cursor()
    except Exception as e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql)
        data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in
                cursor.fetchall()]  # 转换数据，字典格式
    except Exception as e:
        LOGGER.error('数据执行失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return data

def readDb2(sql):
    """
    连接mysql数据库（从），并进行数据查询，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false，如果所有执行正常，则返回查询到的数据，这个数据是经过转换的，转成字典格式，方便模板调用，其中字典的key是数据表里的字段名
    """
    try:
        conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_ip, port=db_port)
        cursor = conn.cursor()
    except Exception as e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql)
        data = cursor.fetchall() # 转换数据，字典格式
    except Exception as  e:
        LOGGER.error('数据执行失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return data

def createDb(sql):
    """
    连接mysql数据库（从），并进行数据查询，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false
    """
    try:
        conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_ip, port=db_port)
        cursor = conn.cursor()
    except Exception as e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql)
        conn.commit()
    except Exception as  e:
        LOGGER.error('建表失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return True

def readDb1(sql):
    """
    连接mysql数据库（从），并进行数据查询，如果连接失败，会把错误写入日志中，并返回false，如果sql执行失败，也会把错误写入日志中，并返回false，如果所有执行正常，则返回查询到的数据，这个数据是经过转换的，转成字典格式，方便模板调用，其中字典的key是数据表里的字段名
    """
    try:
        conn = psycopg2.connect(database="hotel_loan_prod", user="hotel_loan_prod", password="123456@abc", host="hotel.cfdjbes8ghlt.rds.cn-north-1.amazonaws.com.cn", port=db_port)
        cursor = conn.cursor()
    except Exception as e:
        LOGGER.error('数据库连接失败:%s' % e)
        return False
    try:
        cursor.execute(sql)
        #data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in
        #      cursor.fetchall()]  # 转换数据，字典格式
        data = cursor.fetchall()
    except Exception as e:
        LOGGER.error('数据执行失败:%s' % e)
        return False
    finally:
        cursor.close()
        conn.close()
    return data
